250. find指令筆記

WHY

最近在弄crontab的問題,
結果才發現find 加上 delete滿滿的細節。

Note

  1. 搜尋時間

這邊要先知道一件事,atime, mtime , ctime 都是用n*24 hour
作為時間比對的依據,
判斷文件距離上次修改時間已經過了幾個24個小時時段。

find . -mtime -1 # 找到最後修改時間為「少於 1 天前」的檔案。
find . -mtime 1  # 找到最後修改時間為「剛好 1 天前」的檔案。
find . -mtime +1 # 找到最後修改時間為「超過 1 天前」的檔案。

假設現在時間 星期四 14:55
-mtime -1 最後修改時間 是 星期三的14:55到星期四的14:55之間的檔案
-mtime 1 最後修改時間是 星期二14:55到 星期三的14:55的檔案
-mtime +1 最後修改時間是 星期二14:55之前的檔案

其他還有這兩個參數可供使用
-atime 最近訪問時間
-ctime 最近狀態改動時間

這幾個時間都可用stat查看

這張圖表示 -5,5,+5的差別

250-fig.1.png

如果要查詢分鐘的話,
則是使用 -amin,-mmin,-cmin 用法跟上面差不多。

ref. 徹底搞明白find命令mtime含義和用法

  1. 查看說明文件
man find
  1. 搜尋類型
find . -type f # 搜尋檔案
find . -type d # 搜尋資料夾
  1. 搜尋檔案名稱
find . -iname "docker" # 不區分大小寫
find . -name "*.mp4"  # 副檔名為mp4
  1. 執行後再其他指令
   find . -iname "docker" -exec rm -f {} +

{} 代表將前面搜尋的結果傳到後面的參數,
+ 表示將結果一次傳進去給rm,另一種作法是 \;,針對每個資料夾都執行一次rm的指令
記得\前面的空格。

  1. 排除特定資料夾
find . -iname "docker" -mindepth 1 -path /home/user/docker -prune -o -print

-o 在find中,代表OR的邏輯,其中一個為true才執行,
基本語法為find <path> <condition1> -o <condition2>

所以 -o -print的用意識,如果不是 /home/user/docker的資料夾就print

ref.

單純紀錄一下麻煩的要死的cp功能,
後面還是用glcoud storage rsync處理掉,cp真的太慢了。

#!/bin/bash
total=$(find /home/user/MP4Final -type f -cmin -1 | wc -l)
find /home/user/MP4Final -type f -cmin -5 | while read file; do

    # 提取檔案名稱
    filename=$(basename "$file")

    # 提取最後兩個資料夾名稱
    last_two_dirs=$(echo "$file" | awk -F/ '{print $(NF-2) "/" $(NF-1)}')

    # 目標位置
    target_dir="video/$last_two_dirs"

    #echo "source:$file"
    #echo "$target_dir/$filename"
    gcloud storage cp -n "$file" "gs://$target_dir/$filename" --quiet
done
echo "total: $total"